#pragma once
#include <tuple>
#include <iostream>

#define CARG typename
#define CARG_WRAP(x) [] { return (x); }
#define CARG_UNWRAP(x) (x)()


// template<CARG Int>
// constexpr auto make_constant(Int cn)
// {
//     fprintf(stdout, "=====\n");
//     constexpr int n = CARG_UNWRAP(cn);
//     return std::integral_constant<int, n>{};
// }


// template <typename X>
// constexpr void f(X x) {
//   static_assert(std::get<0>(x()) == 103, "test1==");
//   static_assert(std::get<1>(x()) == 204, "test2==");
//   printf("f=====\n");
// }

// constexpr void testTemplate() {
//   // f( [] { return std::make_tuple(101, 202); });
//   make_constant(CARG_WRAP(2));
// }

constexpr int testTemp() {
    constexpr int a =0;
    return a;
}